define(function(require, exports) {
	var pubjs = require('pubjs');
	var util = require('util');
	var view  = require('@base/view');
	var common = require('modules/common');

	// 广告策略模块
	var Base = view.widget.extend({
		init: function(config) {
			var self = this;
			config = pubjs.conf(config, {
				'layout': {
					'module': '@base/view.container'
				}
				// 活动类型 1 RTB 2代理 3直投，4移动
				,'channelType': 1
				,'class': 'M-PageCreativeDetail'
				,'tplFile': '/tpl/campaign/modules/creativeDetail.tpl'
				,'only_list': false        // 电商版只有列表
				,'min_height': 380
				,'max_height': 0
				,'sweety_limit': 0
				,'whisky_limit': 0
				,'view_model': {
					// 优化方式选项
					 '_optimizaOpts': [
						{
							 value: 0
							,label: LANG('智能优化')
						}
						,{
							 value: 1
							,label: LANG('按注册率优化')
						}
						,{
							 value: 2
							,label: LANG('按点击率优化')
						}
						,{
							 value: 3
							,label: LANG('人工分配流量')
						}
					]
					// 广告形式 [1: 硬广，2弹窗]
					,'_adType': 0
					// 显示创意包选择窗口
					,'_showSweetySelectBtn': true
					// 显示落地页选择窗口
					,'_showWhiskySelectBtn': true
					// 显示创意包优化方式编辑窗口
					,'_showSweetyOptimiza': false
					// 显示落地页优化方式编辑窗口
					,'_showWhiskyOptimiza': false
					// 创意包优化方式
					,'sweetyOptimizaType': 0
					// 落地页优化方式
					,'whiskyOptimizaType': 0
					// 创意包列表
					,'sweeties': []
					// 落地页列表
					,'whiskies': []
					// 添加创意包按钮点击
					,evAddSweetyClick: self.eventAddSweetyClick
					// 添加落地页按钮点击
					,evAddWhiskyClick: self.eventAddWhiskyClick
					// 移除创意包按钮点击
					,evRemoveSweety: self.eventRemoveSweety
					// 移除落地页按钮点击
					,evRemoveWhisky: self.eventRemoveWhisky
					// 切换显示创意包优化窗口
					,evToggleSweetyOptimiza: self.eventToggleSweetyOptimiza
					// 切换显示落地页优化窗口
					,evToggleWhiskyOptimiza: self.eventToggleWhiskyOptimiza
					// 图片错误回调
					,evImageError: common.onImageError
					// 是否显示创意包模块
					,showSweety: true
				}
			});

			self.Super('init', arguments);
		}
		,afterBuild: function(){
			var c = this.getConfig();

			// 添加创意包模块
			// this.createAsync('selectSweety', 'sweety/popwin/selectSweety.main');
			// 添加落地页模块
			// this.createAsync('selectWhisky', 'whisky/popwin/selectWhisky.main');

			this.buildFromTemplate({
				// 创意包滚动条
				sweetyScroller: {
					'dir': 'V',
					// 'side': true,
					'watch': 200,
					'pad': false,
					'offset': 20
				},
				// 落地页滚动条
				whiskyScroller: {
					'dir': 'V',
					'watch': 200,
					'pad': false,
					'offset': 3
				},
				// 创意包比例拖放组件
				sweetyRatio: {
					width: 500
				},
				// 落地页比例拖放组件
				whiskyRatio:{
					width: 500
				},
				// 关系
				relation: {
					channelType: c.channelType
				}
			});

			this.uiBind(document.body, 'click.creativeDetail', 'eventContainerClick');
			this.uiProxy('.list-optimiza, .optimiza-body', 'click', function(evt) {
				evt.stopPropagation();
			});

			this.getContainer().addClass(this.getConfig('class'));
		}
		,afterBuildTemplate: function(){
			if(util.isMobile()){
				this.getDOM().find('.list-wrap').css('overflow-y', 'auto');
			}
		}
		,reset: function() {
			this.vm.reset();
			// 渠道id
			this.$exchangeId = 0;
			this.$.relation.reset();
			this.$.sweetyRatio.reset();
			this.$.whiskyRatio.reset();
			return this;
		}
		,getData: function() {
			var relation = this.$.relation.getData();
			if(!relation){
				return false;
			}
			var data = this.vm.getData(["sweeties", "sweetyOptimizaType", "whiskies", "whiskyOptimizaType"]);
			var sweetyRatios = this.$.sweetyRatio.getData();
			var whiskyRatios = this.$.whiskyRatio.getData();
			if(this.$data && this.$data._id){
				data._id = this.$data._id;
			}

			// 创意包
			util.each(data.sweeties, function(item) {
				var id = item.Id =  item._id;
				// 关系
				item.WhiskyIds = relation && relation[id] || null;
				// 流量
				item.RatioSet = sweetyRatios && sweetyRatios[id] || 0;
			});

			// 落地页
			util.each(data.whiskies, function(item) {
				var id = item.Id =  item._id;
				// 流量
				item.RatioSet = whiskyRatios && whiskyRatios[id] || 0;
			});

			return data;
		}
		,setData: function(data) {
			var self = this;
			var vm = self.vm.$;
			self.$data = data;
			self.$product = data._id ? [data._id] : null;

			util.each(data.sweeties, function(sweety) {
				//后端数据原来是Id,转换成_id
				sweety['_id'] = sweety['Id'];
				self.addSweety(sweety);
			});
			util.each(data.whiskies, function(whisky) {
				//后端数据原来是Id,转换成_id
				whisky['_id'] = whisky['Id'];
				self.addWhisky(whisky);
			});

			// 创意包优化策略，对应选项可在view_model._optimizaOpts中查看
			if (data.sweetyOptimizaType != null) {
				vm.sweetyOptimizaType = data.sweetyOptimizaType;
			}
			// 落地页优化策略
			if (data.whiskyOptimizaType != null) {
				vm.whiskyOptimizaType = data.whiskyOptimizaType;
			}

			// 设置关系数据
			var rels = {left:[], right:[], link:{}};
			util.each(data.sweeties, function(sweety){
				rels.left.push(sweety._id);
				// 创意包中关联的落地页
				rels.link[sweety._id] = sweety.WhiskyIds;
			});
			util.each(data.whiskies, function(whisky){
				rels.right.push(whisky._id);
			});

			this.$.relation.setData(rels);

			// 根据不同类型的广告位展示不同的创意包和落地页。
			this.toggleSweety(data.adType);

		}
		// 添加创意包
		,addSweety: function(sweety) {
			var limit = this.getConfig('sweety_limit');
			if (!util.exist(this.vm.getItem("sweeties"), sweety._id, '_id')) {
				if (limit && this.vm.$.sweeties.length >= limit) {
					pubjs.alert(LANG('暂时只允许选择 %1 个创意包', limit));
					var self = this;
					pubjs.loading.show();
					self.checkSelectSweetyBox(function(){
						pubjs.loading.hide();
						self.$.selectSweety.hide();
					});
					this.vm.$._showSweetySelectBtn = false;
					return;
				}

				this.vm.$.sweeties.push(sweety);
				this.$.relation.add(sweety._id, 'left');
				this.$.sweetyRatio.add({
					id: sweety._id,
					text: sweety.Name,
					value: sweety.RatioSet
				});
			}
		}
		// 删除创意包
		,removeSweety: function(id) {
			if (id && id._id) {
				id = id._id;
			}
			util.remove(this.vm.$.sweeties, id, '_id');
			this.vm.$._showSweetySelectBtn = true;
			this.$.relation.remove(id, 'left');
			this.$.sweetyRatio.remove(id);
		}
		// 添加落地页
		,addWhisky: function(whisky) {
			var limit = this.getConfig('whisky_limit');
			if (!util.exist(this.vm.getItem("whiskies"), whisky._id, '_id')) {
				if (limit && this.vm.$.sweeties.length >= limit) {
					pubjs.alert(LANG('暂时只允许选择 %1 个创意包', limit));
					var self = this;
					pubjs.loading.show();
					self.checkSelectWhiskyBox(function(){
						pubjs.loading.hide();
						self.$.selectWhisky.hide();
					});
					this.vm.$._showWhiskySelectBtn = false;
					return;
				}

				// 预览地址
				if (!whisky.preview) {
					whisky.preview = (pubjs.config('materialPreview/whisky') || '').replace(/\{id\}/, whisky._id);
				}

				this.vm.$.whiskies.push(whisky);
				this.$.relation.add(whisky._id, 'right');
				this.$.whiskyRatio.add({
					id: whisky._id,
					text: whisky.Name,
					value: whisky.RatioSet
				});
			}
		}
		// 删除落地页
		,removeWhisky: function(id) {
			if (id && id._id) {
				id = id._id;
			}
			this.vm.$._showWhiskySelectBtn = true;
			util.remove(this.vm.$.whiskies, id, '_id');
			this.$.relation.remove(id, 'right');
			this.$.whiskyRatio.remove(id);
		}
		,eventAddSweetyClick: function() {
			var self = this;
			self.checkSelectSweetyBox(function(){
				self.$.selectSweety.reset().setParam({Products: self.$product}).load().setValue(self.vm.getItem("sweeties")).show();
			});
		}
		,eventAddWhiskyClick: function() {
			var self = this;
			self.checkSelectWhiskyBox(function(){
				self.$.selectWhisky.reset().setParam({Products: self.$product}).load().setValue(self.vm.getItem("whiskies")).show();
			});
		}
		,eventRemoveSweety: function(sweety) {
			this.removeSweety(sweety);
		}
		,eventRemoveWhisky: function(whisky) {
			this.removeWhisky(whisky);
		}
		,eventToggleSweetyOptimiza: function(ev) {
			this.vm.$._showSweetyOptimiza = !this.vm.$._showSweetyOptimiza;
		}
		,eventToggleWhiskyOptimiza: function(ev) {
			this.vm.$._showWhiskyOptimiza = !this.vm.$._showWhiskyOptimiza;
		}
		,eventContainerClick: function() {
			this.vm.$._showSweetyOptimiza = false;
			this.vm.$._showWhiskyOptimiza = false;
		}
		// 广告形式更改消息, 广告形式改变时广播
		,onAdTypeChange: function(ev) {
			//this.vm.$._adType = ev.param;
			this.toggleSweety(ev.param);
		}
		// 渠道更改消息, 渠道变更时广播
		,onExchangeIdChange: function(ev) {
			this.$exchangeId = ev.param;
		}
		// 滚动条消息
		,onScroll: function(ev) {
			var pos = ev.param.pos;
			switch(ev.name) {
				case 'sweetyScroller':
					this.$.relation.scroll('left', pos);
				break;
				case 'whiskyScroller':
					this.$.relation.scroll('right', pos);
				break;
			}
			return false;
		}
		// 添加创意包消息
		,onSelectSweety: function(ev) {
			this.addSweety(ev.param);
			return false;
		}
		// 取消添加创意包消息
		,onUnselectSweety: function(ev) {
			this.removeSweety(ev.param);
			return false;
		}
		// 添加落地页消息
		,onSelectWhisky: function(ev) {
			this.addWhisky(ev.param);
			return false;
		}
		// 取消添加落地页消息
		,onUnselectWhisky: function(ev) {
			this.removeWhisky(ev.param);
			return false;
		}
		,checkSelectSweetyBox: function(callback){
			this.checkModule('selectSweety', 'sweety/popwin/selectSweety.main',callback);
		}
		,checkSelectWhiskyBox: function(callback){
			this.checkModule('selectWhisky', 'whisky/popwin/selectWhisky.main',callback);
		}
		,checkModule: function(mod, path, param, callback){
			if(util.isFunc(param)){
				callback = param;
				param = {};
			}
			if(!this.$[mod] && path){
				param = param || {};
				if(util.isFunc(callback)){
					this.createAsync(mod, path, param, callback);
				}else{
					this.createAsync(mod, path, param);
				}
			}else{
				if(util.isFunc(callback)){
					callback();
				}
			}
		}
		,toggleSweety: function(adType)
		{
			this.vm.$._adType = adType;
			this.vm.$.showSweety = (adType != 2);
			return this;
		}
	});
	exports.base = Base;

	// 广告策略模块 —— 弹层
	var Popwin = Base.extend({

		init: function(config) {
			config = pubjs.conf(config, {
				'layout': {
					'module': '@base/dialog.base'
					,'width': util.getViewport().width - 60
					// ,'height': 708
					,'silence': false
					,'title': LANG('创意管理')
					,'size': '2xl'
				}
				,'class': 'M-PageCreativeDetail M-PageCreativeDetailPopWin'
			});

			this.Super('init', arguments);
		}
		,onDialogOk: function(ev) {
			var data = this.getData();
			if(data){
				this.fire('creativeDetailDone', data);
				this.hide();
				return false;
			}
		}
	});
	exports.popwin = Popwin;
});
